// 小练习1：利用闭包修改下面的代码，让结果依次为1、2、3、4、5：

var counter = 1;
(function () {
    for (var i = 1; i <= 5; i++) {
        setTimeout(function timer() {
            console.log(i);
            counter ++;
            if (counter >= 6) {
                console.log('----------------------------------');
                timer1();
            }
        }, i * 1000);
    }
})();

// 方法1
function timer1() {
    for (var i = 1; i <= 5; i++) {
        setTimeout(function timer(i) {
            console.log(i)
            if (i >= 5) {
                console.log('----------------------------------');
                timer2();
            }
        }, i * 1000, i);
    }
}

// 方法2
function timer2() {
    for (var i = 1; i <= 5; i++) {
        (function (i) {
            setTimeout(function timer() {
                console.log(i)
                if (i >= 5) {
                    console.log('----------------------------------');
                    timer3();
                }
            }, i * 1000);
        })(i)
    }
}

// 方法3
function timer3() {
    for (var i = 1; i <= 5; i++) {
        setTimeout(function timer(i) {
            console.log(i)
            if (i >= 5) {
                console.log('----------------------------------');
                timer4();
            }
        }.bind(null, i), i * 1000);
    }
}

// 方法4（这里let生成块级作用域，相当于创建了匿名的闭包）
function timer4() {
    for (let i = 1; i <= 5; i++) {
        setTimeout(function timer() {
            console.log(i)
            if (i >= 5) {
                console.log('----------------------------------');
                timer5();
            }
        }, i * 1000);
    }
}

// 方法4经过babel翻译之后
function timer5() {
    var _loop = function _loop(i) {
        setTimeout(function () {
            console.log(i);
        }, i * 1000);
    };

    for (var i = 1; i < 5; i++) {
        _loop(i);
    }
}

